{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pandas怎么处理日期索引的缺失？\n",
    "\n",
    "\n",
    "问题：按日期统计的数据，缺失了某天，导致数据不全该怎么补充日期？\n",
    "\n",
    "公众号：蚂蚁学Python\n",
    "\n",
    "可以用两种方法实现：  \n",
    "1、DataFrame.reindex，调整dataframe的索引以适应新的索引  \n",
    "2、DataFrame.resample，可以对时间序列重采样，支持补充缺失值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 问题：如果缺失了索引该怎么填充？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pdate</th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        pdate   pv  uv\n",
       "0  2019-12-01  100  10\n",
       "1  2019-12-02  200  20\n",
       "2  2019-12-04  400  40\n",
       "3  2019-12-05  500  50"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\n",
    "    \"pdate\": [\"2019-12-01\", \"2019-12-02\", \"2019-12-04\", \"2019-12-05\"],\n",
    "    \"pv\": [100, 200, 400, 500],\n",
    "    \"uv\": [10, 20, 40, 50],\n",
    "})\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1a0d908bf48>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.set_index(\"pdate\").plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***问题，这里缺失了2019-12-03的数据，导致数据不全该怎么补充？***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 方法1：使用pandas.reindex方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1、将df的索引变成日期索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pdate</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             pv  uv\n",
       "pdate              \n",
       "2019-12-01  100  10\n",
       "2019-12-02  200  20\n",
       "2019-12-04  400  40\n",
       "2019-12-05  500  50"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_date = df.set_index(\"pdate\")\n",
    "df_date"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['2019-12-01', '2019-12-02', '2019-12-04', '2019-12-05'], dtype='object', name='pdate')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_date.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pdate</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             pv  uv\n",
       "pdate              \n",
       "2019-12-01  100  10\n",
       "2019-12-02  200  20\n",
       "2019-12-04  400  40\n",
       "2019-12-05  500  50"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将df的索引设置为日期索引\n",
    "df_date = df_date.set_index(pd.to_datetime(df_date.index))\n",
    "df_date"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2019-12-01', '2019-12-02', '2019-12-04', '2019-12-05'], dtype='datetime64[ns]', name='pdate', freq=None)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_date.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2、使用pandas.reindex填充缺失的索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2019-12-01', '2019-12-02', '2019-12-03', '2019-12-04',\n",
       "               '2019-12-05'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成完整的日期序列\n",
    "pdates = pd.date_range(start=\"2019-12-01\", end=\"2019-12-05\")\n",
    "pdates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-03</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             pv  uv\n",
       "2019-12-01  100  10\n",
       "2019-12-02  200  20\n",
       "2019-12-03    0   0\n",
       "2019-12-04  400  40\n",
       "2019-12-05  500  50"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_date_new = df_date.reindex(pdates, fill_value=0)\n",
    "df_date_new"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1a0db1ab388>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_date_new.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 方法2：使用pandas.resample方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1、先将索引变成日期索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pdate</th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        pdate   pv  uv\n",
       "0  2019-12-01  100  10\n",
       "1  2019-12-02  200  20\n",
       "2  2019-12-04  400  40\n",
       "3  2019-12-05  500  50"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pdate</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             pv  uv\n",
       "pdate              \n",
       "2019-12-01  100  10\n",
       "2019-12-02  200  20\n",
       "2019-12-04  400  40\n",
       "2019-12-05  500  50"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_new2 = df.set_index(pd.to_datetime(df[\"pdate\"])).drop(\"pdate\", axis=1)\n",
    "df_new2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2019-12-01', '2019-12-02', '2019-12-04', '2019-12-05'], dtype='datetime64[ns]', name='pdate', freq=None)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_new2.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2、使用dataframe的resample的方法按照天重采样"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "resample的含义：  \n",
    "改变数据的时间频率，比如把天数据变成月份，或者把小时数据变成分钟级别\n",
    "\n",
    "resample的语法：    \n",
    "(DataFrame or Series).resample(arguments).(aggregate function)\n",
    "\n",
    "resample的采样规则参数：  \n",
    "https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pdate</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>100.0</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-02</td>\n",
       "      <td>200.0</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-03</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-04</td>\n",
       "      <td>400.0</td>\n",
       "      <td>40.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500.0</td>\n",
       "      <td>50.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               pv    uv\n",
       "pdate                  \n",
       "2019-12-01  100.0  10.0\n",
       "2019-12-02  200.0  20.0\n",
       "2019-12-03    0.0   0.0\n",
       "2019-12-04  400.0  40.0\n",
       "2019-12-05  500.0  50.0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 由于采样会让区间变成一个值，所以需要指定mean等采样值的设定方法\n",
    "df_new2 = df_new2.resample(\"D\").mean().fillna(0)\n",
    "df_new2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pv</th>\n",
       "      <th>uv</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pdate</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>2019-12-01</td>\n",
       "      <td>150.0</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-03</td>\n",
       "      <td>200.0</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2019-12-05</td>\n",
       "      <td>500.0</td>\n",
       "      <td>50.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               pv    uv\n",
       "pdate                  \n",
       "2019-12-01  150.0  15.0\n",
       "2019-12-03  200.0  20.0\n",
       "2019-12-05  500.0  50.0"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# resample的使用方式\n",
    "df_new2.resample(\"2D\").mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
